package com.example.mkio.androidpractice.codes;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by mk.io on 17-6-7.
 */

public class CachBySoftRef {

    //首先定义一个HashMap ，保存软引用
    private Map<String ,SoftReference<Bitmap>> mReferenceMap = new HashMap<String, SoftReference<Bitmap>>();

    //再定义一个方法，保存 Bitmap 的软引用到 HashMap
    public void addBitmapToCache(String path){
        //强引用 Bitmap 对象
        Bitmap mBitmap = BitmapFactory.decodeFile(path);
        //软引用的 Bitmap 对象
        SoftReference<Bitmap> softBitmap = new SoftReference<Bitmap>(mBitmap);
        //添加该对象到 Map 中使其缓存
        mReferenceMap.put(path,softBitmap);

    }

    //获取的时候，可以通过 SoftRefenerce 的 get() 来得到 Bitmap 对象
    public Bitmap getBitmapByPath(String path){
        //从缓存中取出软引用的 Bitmap 对象
        SoftReference<Bitmap> softBitmap = mReferenceMap.get(path);
        //判断是否存在软引用
        if (softBitmap == null) {
            return  null;
        }
        //通过软引用取出 Bitmap 对象，如果由于内存不足该 Bitmap 对象被回收，将去空，如果未被回收，则可以重复使用，提高了速度
        Bitmap mBitmap = softBitmap.get();
        return mBitmap;

    }
}
